PYTHON | 您所在的位置:网站首页 › python socketserver 客户端ip › PYTHON |
主要类型 该模块有四个比较主要的类,其中常用的是 TCPServer 和 UDPServer。 1. TCPServer 2. UDPServer 3. UnixStreamServer,类似于TCPServer提供面向数据流的套接字连接,但是旨在UNIX平台上可用; 4. UnixDatagramServer,类似于UDPServer提供面向数据报的套接字连接,但是旨在UNIX平台上可用; 这四个类型同步地处理请求,也就是说一个请求没有完成之前是不会处理下一个请求的,这种模式当然不适合生产环境,一个客户端连接就可能拖延所有的执行。所以这个模块还提供了两种支持异步处理的类: 5. ForkingMixIn,为每一个客户端请求派生一个新的进程去专门处理; 6. ThreadingMixIn,为每一个客户端请求派生一个新的线程去专门处理; 继承自这两个类型的服务端在处理新的客户端连接时不会阻塞,而是创建新的进/线程专门处理客户端的请求。 编程框架 首先从高层面介绍一下使用SocketServer模块开发多进程/线程 异步服务器的流程: 1. 根据需要选择一个合适的服务类型,如,面向TCP连接的多进程服务器: ForkingTCPServer ; 2. 创建一个请求处理器(request handler)类型,这个类型的 handle()(类似于回调函数)方法中定义如何处理到达的客户端连接。 3. 实例化服务器,传入服务器绑定的地址和第2步定义的请求处理器类; 4. 调用服务器实例的 handle_request() 或 serve_forever() 方法,一次或多次处理客户请求。 实例代码: 服务端:socket server: import socketserver import time host = '' port = 8000 buffersize = 1024 address=(host,port) class MyRequestHandler(socketserver.BaseRequestHandler): def handle(self): print('客户端已经连接,地址:{}'.format(self.client_address)) while True: conn = self.request print('客户端地址:{}'.format(self.client_address)) while True: client_data = conn.recv(buffersize) print(str(client_data,'utf8')) print('waiting......') # conn.sendall(time.ctime().encode(encoding='utf-8')+b' '+client_data) resposeStr = input('>>>') conn.sendall(time.ctime().encode(encoding='utf-8')+b' '+ bytes(resposeStr,'utf8')) conn.close() if __name__=='__main__': server = socketserver.ThreadingTCPServer(address,MyRequestHandler) print('正在等待客户端的连接。。。。。。') server.serve_forever()客户端:普通client import socket sk=socket.socket() address = ('127.0.0.1',8000) sk.connect(address) while True: inp = input('>>>') if inp=='exit': break sk.send(bytes(inp,'utf8')) data = sk.recv(1024) print(str(data,'utf-8')) sk.close()
|
CopyRight 2018-2019 实验室设备网 版权所有 |